library(tidyverse)── Attaching core tidyverse packages ──────────────────────── tidyverse 2.0.0 ──
✔ dplyr 1.1.1 ✔ readr 2.1.4
✔ forcats 1.0.0 ✔ stringr 1.5.0
✔ ggplot2 3.4.2 ✔ tibble 3.2.1
✔ lubridate 1.9.2 ✔ tidyr 1.3.0
✔ purrr 1.0.1
── Conflicts ────────────────────────────────────────── tidyverse_conflicts() ──
✖ dplyr::filter() masks stats::filter()
✖ dplyr::lag() masks stats::lag()
ℹ Use the conflicted package (<http://conflicted.r-lib.org/>) to force all conflicts to become errors
library(readxl)
library(officer)
Attaching package: 'officer'
The following object is masked from 'package:readxl':
read_xlsx
library(plotly)
Attaching package: 'plotly'
The following object is masked from 'package:ggplot2':
last_plot
The following object is masked from 'package:stats':
filter
The following object is masked from 'package:graphics':
layout
Se configura el sistema en idioma español.
#Sys.setlocale("LC_ALL", "Spanish")
Sys.setlocale("LC_ALL", "es_ES.UTF-8")[1] "LC_COLLATE=es_ES.UTF-8;LC_CTYPE=es_ES.UTF-8;LC_MONETARY=es_ES.UTF-8;LC_NUMERIC=C;LC_TIME=es_ES.UTF-8"
datos <- read_excel("../data/mundial.xlsx")Se observan los resultados.
glimpse(datos)Rows: 1,006
Columns: 15
$ Pais <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador <chr> "Pervis Estupiñán", "Carlos Gruezo", "Moisés…
$ Posicion <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90 <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…
Hay erroes en los nombres de los jugadores, por lo que se crean dos cadenas de caracteres, una con los caracteres incorrectos y otra con la sustitución correcta.
incorrecto <- c("Ã<81>", "é", "á", "ó", "Ã", "ñ", "óź", "í\u0081", "íº", "ź", "Å‚", "Å„", "¯", "í®", "í¢", "í¸", "í«", "í±", "¼", "Å«", "ć", "Å¡", "Ć", "ÄŒ", "§", "í‰", "£", "Ä™", "Ä…", "Å\u0081", "í“", "Å i", "Ä\u008d", "Ä\u0090", "Ž", "¦", "í¨", "í¤", "İ", "ÄŸ", "í´")
correcto <- c("Á", "é", "á", "ó", "í", "ñ", "ó", "Á", "ú", "z", "l", "ń", "ï", "î", "â", "ø", "ë", "ñ", "z", "ū", "ć", "š", "Ć", "Č", "ç", "É", "ã", "ę", "ą", "Ł", "Ó", "Ši", "č", "Đ", "Ž", "æ", "e", "ä", "İ", "ğ", "ô")Se crea una función en donde se reemplazan los caracteres incorrectos por los correctos.
replace_chars <- function(cadena, caracteres_correctos, characteres_incorectos) {
remplazos <- setNames(caracteres_correctos, characteres_incorectos)
str_replace_all(cadena, remplazos)
}Se aplica la función.
datos$Jugador <- replace_chars(datos$Jugador, incorrecto, correcto)Se observa el resultado.
datos$Jugador[0:100] [1] "Pí¨rvis Estupiñán" "CarÅ‚os Gruí¨Åºo"
[3] "Moisés Caicí¨do" "Ã\u0081ngí¨Å‚ Mí¨na"
[5] "Michaí¨Å‚ Estrada" "Pií¨ro Hincapié"
[7] "Féłix Torrí¨s Caicí¨do" "AÅ‚í¨xandí¨r DomÃnguí¨Åº"
[9] "Enní¨r VaÅ‚í¨ncia" "Ã\u0081ngí¨Å‚o Prí¨ciado"
[11] "Robí¨rt ArboÅ‚í¨da" "GonźaÅ‚o PÅ‚ata"
[13] "Byron Castiłło" "Xavií¨r Arrí¨aga"
[15] "AÅ‚an Franco" "Hí¨rnán GaÅ‚Ãndí¨Åº"
[17] "Jhí¨gson Méndí¨Åº" "Ayrton Prí¨ciado"
[19] "Jí¨rí¨my Sarmií¨nto" "Romario Ibarra"
[21] "Moisés RamÃrí¨Åº" "Luis Fí¨rnando Lí¨Ã³n"
[23] "Joao Joshimar Rojas" "Rí¨nato Ibarra"
[25] "Junior Sornoźa" "Pí¨dro Pí¨rÅ‚aźa"
[27] "Fí¨rnando Gaibor" "Pí¨dro OrtÃź"
[29] "Jordy Caicí¨do" "José Cifuí¨ntí¨s"
[31] "Christian Cruź" "Bí¨dí¨r Caicí¨do"
[33] "José CarabaÅ‚Ã" "Djorkaí¨ff Rí¨asco"
[35] "José Hurtado" "Erick Fí¨rigra"
[37] "Adołfo Muñoź" "Christian Noboa"
[39] "Fidí¨Å‚ MartÃní¨Åº" "Dií¨go PaÅ‚acios"
[41] "Janní¨r Coroźo" "Damián DÃaź"
[43] "Brayan AnguÅ‚o" "Romario Caicí¨do"
[45] "Washington Coroźo" "Michaí¨Å‚ Carcí¨Å‚í¨n"
[47] "Jhojan JuÅ‚io" "Juan Caźarí¨s"
[49] "Lí¨onardo Campana" "Mí¨mphis Dí¨pay"
[51] "Frí¨nkií¨ dí¨ Jong" "Davy KÅ‚aassí¨n"
[53] "DaÅ‚í¨y BÅ‚ind" "Gí¨orginio WijnaÅ‚dum"
[55] "Dí¨nźí¨Å‚ Dumfrií¨s" "Stí¨ví¨n Bí¨rghuis"
[57] "Justin Bijłow" "Virgił van Dijk"
[59] "Stí¨fan dí¨ Vrij" "Matthijs dí¨ Ligt"
[61] "Tim KruÅ‚" "Owí¨n WijndaÅ‚"
[63] "Cody Gakpo" "Donyí¨Å‚Å‚ MaÅ‚í¨n"
[65] "Stí¨ví¨n Bí¨rgwijn" "Arnaut Groí¨ní¨ví¨Å‚d"
[67] "Luuk dí¨ Jong" "Noa Lang"
[69] "Guus TiÅ‚" "Martí¨n dí¨ Roon"
[71] "Jaspí¨r Ciłłí¨ssí¨n" "Tyrí¨Å‚Å‚ MaÅ‚acia"
[73] "Jurrií¨n Timbí¨r" "Kí¨nny Tí¨tí¨"
[75] "Ryan Graví¨nbí¨rch" "Tí¨un Koopmí¨iní¨rs"
[77] "Wout Wí¨ghorst" "Donny van dí¨ Bí¨í¨k"
[79] "Ryan Babí¨Å‚" "Dí¨vyní¨ Rí¨nsch"
[81] "CaÅ‚vin Stí¨ngs" "Patrick van AanhoÅ‚t"
[83] "Nathan Aké" "Kałidou Koułibały"
[85] "IsmaiÅ‚a Sarr" "Idrissa Gana Guí¨yí¨"
[87] "SaÅ‚iou Ciss" "Edouard Mí¨ndy"
[89] "Sadio Mané" "Bouna Sarr"
[91] "Chí¨ikhou Kouyaté" "Abdou Diałło"
[93] "BouÅ‚ayí¨ Dia" "Famara Dií¨dhiou"
[95] "Papí¨ Abou Cissí¨" "NampaÅ‚ys Mí¨ndy"
[97] "Krí¨pin Diatta" "Ibrahima Mbayí¨"
[99] "Habib Diałło" "Youssouf Sabały"
Se buscan las celdas que solo contengan un nombre del jugador, puesto que esto indicaría un error en la digitación del nombre (los nombres son compuestos por dos o más palabras).
La expresión regular indica:
expresion_regular <- "^\\w+$"Se utilza la función grepl(), “Generalized Regular
Expression Pattern Matching” para filtrar los nombres de jugadores
que contengan una sola palabra. Se guarda en un objeto llamado
unicos.
unicos <- grepl(expresion_regular, datos$Jugador, perl = TRUE)Se obtienen 29 casos.
datos$Jugador[unicos] [1] "Rodri" "Gavi" "Bryan" "Rodrigo" "Munir"
[6] "Marquinhos" "Fabinho" "Raphinha" "Antony" "Rodrygo"
[11] "Wakaso" "Vitinha"
Se excluyen los 29 casos anteriores del data set. Se utiliza
subset() y el operador ! para indicar que
extraiga todos los casos diferentes a unicos (!unicos).
datos_limpios <- subset(datos, !unicos)Los datos originales tienen 1006 filas, al realizar el
proceso anterior, se obtiene un dataset con 977 filas.
length(datos$Jugador)[1] 1006
length(datos_limpios$Jugador)[1] 994
Se muestra un ejemplo del resultado.
glimpse(datos_limpios)Rows: 994
Columns: 15
$ Pais <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador <chr> "Pí¨rvis Estupiñán", "CarÅ‚os Gruí¨Åºo", "Moi…
$ Posicion <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90 <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…
Se revisa si hay datos duplicados en el nombre de los jugadores, se
utiliza la función duplicated(). Dicha función da una
vector con valores booleanos True o False, de
modo que la función which indica cuáles de esos valores
están duplicados. Así se genera un vector con los índices de los datos
duplicados. En este caso, el vector tiene longitud 0, lo que
indica que no hay nombres de jugadores duplicados.
duplicados <- duplicated(datos_limpios$Jugador)
indices_duplicados <- which(duplicados)
indices_duplicadosinteger(0)
Los resultados indican que no hay datos duplicados en los nombres de
los jugadores. Luego, se observa las categorías de las otras variables
cualitativas, iniciando por la región. Se utiliza la función
unique() para observar las categorías y la función
table() para revisar las frecuencias y que cada categoría
cuenta con casos.
unique(datos_limpios$Region)[1] "CONMEBOL" "UEFA" "CAF" "AFC" "CONCACAF"
table(datos$Region)
AFC CAF CONCACAF CONMEBOL UEFA
140 153 118 168 427
Se realiza lo mismo con la variable Posicion.
unique(datos_limpios$Posicion)[1] "Defensa" "Mediocentro" "Delantero" "Portero"
table(datos_limpios$Posicion)
Defensa Delantero Mediocentro Portero
327 234 360 73
Por último, inspecciona la variable Pais.
unique(datos_limpios$Pais) [1] "Ecuador" "Netherlands" "Senegal" "England"
[5] "IR Iran" "United States" "Wales" "Argentina"
[9] "Mexico" "Poland" "Australia" "Denmark"
[13] "France" "Tunisia" "Costa Rica" "Germany"
[17] "Japan" "Spain" "Belgium" "Canada"
[21] "Croatia" "Morocco" "Brazil" "Cameroon"
[25] "Serbia" "Switzerland" "Ghana" "Korea Republic"
[29] "Portugal" "Uruguay"
table(datos_limpios$Pais)
Argentina Australia Belgium Brazil Cameroon
38 16 35 37 31
Canada Costa Rica Croatia Denmark Ecuador
33 16 33 36 49
England France Germany Ghana IR Iran
34 31 33 35 40
Japan Korea Republic Mexico Morocco Netherlands
45 39 31 28 34
Poland Portugal Senegal Serbia Spain
39 33 28 26 35
Switzerland Tunisia United States Uruguay Wales
29 29 38 39 24
En todas las condiciones anteriores, hay datos válidos para cada una de las categorías.
Se buscan datos nulos en cada una de las variables. En este caso, no se va a implementar métodos de imputación, simplemente se extraen dichos casos.
Se crea un ciclo for que itere sobre cada una de las
columnas de los datos, de modo que utiliza la función
is.na() para detectar los datos faltantes.
num_columnas <- ncol(datos_limpios) #Número de columnasfor (i in 1:num_columnas) { #de 1 a n columnas
valores_faltantes <- is.na(datos_limpios[, i]) #Guarda la cantidad de NA por cada columna
cantidad_faltantes <- sum(valores_faltantes) #Suma todos los NA
cat(colnames(datos_limpios)[i], ":", cantidad_faltantes, "\n") #Imprime el nombre de la columna y la cantidad de NA`s
}Pais : 0
Region : 0
Jugador : 0
Posicion : 0
Edad : 0
Partidos_Jugados : 0
Partidos_11_inicial : 0
Minutos_jugados : 0
Minutos_jugados_90 : 0
Goles : 0
Asistencias : 0
Amarillas : 0
Rojas : 0
Goles_por_minuto : 0
Asistencias_por_minuto : 0
Nótese que casi todas las variables están en el formato correcto, exceptuando a las variables que contienen números enteros.
glimpse(datos_limpios)Rows: 994
Columns: 15
$ Pais <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador <chr> "Pí¨rvis Estupiñán", "CarÅ‚os Gruí¨Åºo", "Moi…
$ Posicion <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad <dbl> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados <dbl> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial <dbl> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados <dbl> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90 <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles <dbl> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias <dbl> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas <dbl> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas <dbl> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…
Se utiliza la función apply() para iterar sobre las
columnas que contienen valores enteros. Primero se crea un vector con
los nombres de las variables y se guarda en un objeto llamado
var_disc (variables discretas).
var_disc <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas")Para hacer un slicing se adjunta el vector a un
parántesis cuadrado del data set, así se obtiene una subselección de los
datos.
datos_limpios[var_disc]# A tibble: 994 × 8
Edad Partidos_Jugados Partidos_11_inicial Minutos_jugados Goles Asistencias
<dbl> <dbl> <dbl> <dbl> <dbl> <dbl>
1 24 17 17 1513 2 1
2 26 16 16 1395 1 0
3 20 15 15 1305 2 4
4 34 15 13 1079 2 3
5 25 17 11 1043 6 2
6 20 11 11 990 1 0
7 25 11 11 990 2 0
8 34 10 10 824 0 0
9 32 12 10 758 4 1
10 23 13 8 755 0 0
# ℹ 984 more rows
# ℹ 2 more variables: Amarillas <dbl>, Rojas <dbl>
Luego, se le aplica la función as.interger() para
convertir los datos en formato de número entero, se utiliza como
argunmento dentro de apply().
datos_limpios[var_disc] <- as.data.frame(apply(datos_limpios[var_disc], 2, as.integer)) #El 2 indica que se aplique a cada columna en lugar de cada filaNótese que ahora variables como Goles se encuentran
etiquetadas como int, mientras que variables continuas como
Goles por minuto se encuentran categorizadas como
dbl.
glimpse(datos_limpios)Rows: 994
Columns: 15
$ Pais <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador", "Ec…
$ Region <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONMEBOL",…
$ Jugador <chr> "Pí¨rvis Estupiñán", "CarÅ‚os Gruí¨Åºo", "Moi…
$ Posicion <chr> "Defensa", "Mediocentro", "Mediocentro", "Medio…
$ Edad <int> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30, 21,…
$ Partidos_Jugados <int> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10, 16,…
$ Partidos_11_inicial <int> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, 7, 7,…
$ Minutos_jugados <int> 1513, 1395, 1305, 1079, 1043, 990, 990, 824, 75…
$ Minutos_jugados_90 <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, 9.2, …
$ Goles <int> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, 0, 0,…
$ Asistencias <int> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, 1, 0,…
$ Amarillas <int> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, 3, 0,…
$ Rojas <int> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 0,…
$ Goles_por_minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, 0.00,…
$ Asistencias_por_minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, 0.00,…
Para hacer un mejor manejo de las variables se crean vectores que
agrupan las columnas por su tipo de medición, a saber,
variables cualitativas,
variables cuantitativas discretas,
variables cuantitativas de razón o continua. Estos vectores
se utilizarán dependiendo del caso.
var_cual <- c("Pais", "Region", "Posicion") #Se extrae la variable jugador debido a que no se puede utilizar agrupaciones en la misma
var_disc <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas")
var_cont <- c("Minutos_jugados_90", "Goles_por_minuto", "Asistencias_por_minuto")
var_cuant <- c("Edad", "Partidos_Jugados", "Partidos_11_inicial", "Minutos_jugados", "Goles", "Asistencias", "Amarillas", "Rojas","Minutos_jugados_90", "Goles_por_minuto", "Asistencias_por_minuto")Se crea un ciclo for para genera cada una de las tablas
y crear un objeto con el respectivo nombre de la columna. Se utiliza la
función assign() para crear dichos objetos.
for (columna in var_cual) {
tabla_frecuencias <- table(datos_limpios[[columna]]) #Se crea una tabla de frecuencias por cada variable
tabla_frecuencias <- addmargins(tabla_frecuencias, FUN = list("Total General" = sum), quiet = TRUE) # Se crea la fila del total general al final
tabla_frecuencias <- as.data.frame(tabla_frecuencias) #Se convierte en data frame
colnames(tabla_frecuencias) <- c(columna, "Frecuencia") #Se indica el nombre de las columnas
assign(paste("tabla_", columna, sep = ""), tabla_frecuencias) #Se crea un objeto por cada tabla
}Se observan los resultados.
tabla_Pais Pais Frecuencia
1 Argentina 38
2 Australia 16
3 Belgium 35
4 Brazil 37
5 Cameroon 31
6 Canada 33
7 Costa Rica 16
8 Croatia 33
9 Denmark 36
10 Ecuador 49
11 England 34
12 France 31
13 Germany 33
14 Ghana 35
15 IR Iran 40
16 Japan 45
17 Korea Republic 39
18 Mexico 31
19 Morocco 28
20 Netherlands 34
21 Poland 39
22 Portugal 33
23 Senegal 28
24 Serbia 26
25 Spain 35
26 Switzerland 29
27 Tunisia 29
28 United States 38
29 Uruguay 39
30 Wales 24
31 Total General 994
tabla_Posicion Posicion Frecuencia
1 Defensa 327
2 Delantero 234
3 Mediocentro 360
4 Portero 73
5 Total General 994
tabla_Region Region Frecuencia
1 AFC 140
2 CAF 151
3 CONCACAF 118
4 CONMEBOL 163
5 UEFA 422
6 Total General 994
Por último, se guradan las tablas de frecuencias en un documento de
Word, para ello se vuelve a correr el ciclo for, pero se le
incluye el código para guardarlo.
doc_tablas <- read_docx() #Se crea el documento Wordfor (columna in var_cual) {
tabla_frecuencias <- table(datos_limpios[[columna]])
tabla_frecuencias <- addmargins(tabla_frecuencias, FUN = list("Total General" = sum), quiet = TRUE)
tabla_frecuencias <- as.data.frame(tabla_frecuencias)
colnames(tabla_frecuencias) <- c(columna, "Frecuencia")
assign(paste("tabla_", columna, sep = ""), tabla_frecuencias) #Se crea un objeto por cada tabla
#Se guarda en un Word
doc_tablas <- doc_tablas %>%
body_add_par(columna, style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = tabla_frecuencias,
align_table = "center",
style = "table_template") %>% #Se agrega la tabla
body_add_break(pos = "after") #Se agrega salto de página
}Se guarda el documento en la caperta docs.
print(doc_tablas, target = "../docs/frecuencias.docx")Se crean las tablas cruzadas con la función table().
region_posicion <- table(datos_limpios$Region, datos_limpios$Posicion)
region_posicion
Defensa Delantero Mediocentro Portero
AFC 50 27 55 8
CAF 50 36 55 10
CONCACAF 43 30 38 7
CONMEBOL 50 34 64 15
UEFA 134 107 148 33
pais_posicion <- table(datos_limpios$Pais, datos_limpios$Posicion)
pais_posicion
Defensa Delantero Mediocentro Portero
Argentina 11 9 13 5
Australia 6 3 5 2
Belgium 7 13 12 3
Brazil 12 9 13 3
Cameroon 11 9 9 2
Canada 11 6 13 3
Costa Rica 7 4 4 1
Croatia 11 6 13 3
Denmark 10 12 13 1
Ecuador 16 9 20 4
England 10 9 11 4
France 11 7 12 1
Germany 10 8 12 3
Ghana 9 8 15 3
IR Iran 14 7 17 2
Japan 17 7 19 2
Korea Republic 13 10 14 2
Mexico 12 8 10 1
Morocco 11 7 9 1
Netherlands 12 11 7 4
Poland 14 5 16 4
Portugal 11 8 11 3
Senegal 10 5 11 2
Serbia 7 4 13 2
Spain 14 11 8 2
Switzerland 8 6 14 1
Tunisia 9 7 11 2
United States 13 12 11 2
Uruguay 11 7 18 3
Wales 9 7 6 2
Se añaden las columnas y filas de totales generales
region_posicion_cruzada <- cbind(region_posicion, "Total General" = rowSums(region_posicion)) #Se crea la columna de total general
region_posicion_cruzada <- addmargins(region_posicion, FUN = list("Total General" = sum), quiet = TRUE) #Se crea la fila de total general
region_posicion_cruzada <- as.data.frame.matrix(region_posicion_cruzada) #Se convierte la matriz en data frame
region_posicion_cruzada <- rownames_to_column(region_posicion_cruzada, "Region") #Se renombran las columnas
region_posicion_cruzada Region Defensa Delantero Mediocentro Portero Total General
1 AFC 50 27 55 8 140
2 CAF 50 36 55 10 151
3 CONCACAF 43 30 38 7 118
4 CONMEBOL 50 34 64 15 163
5 UEFA 134 107 148 33 422
6 Total General 327 234 360 73 994
pais_posicion_cruzada <- cbind(pais_posicion, "Total General" = rowSums(pais_posicion))
pais_posicion_cruzada <- addmargins(pais_posicion, FUN = list("Total General" = sum), quiet = TRUE)
pais_posicion_cruzada <- as.data.frame.matrix(pais_posicion_cruzada)
pais_posicion_cruzada <- rownames_to_column(pais_posicion_cruzada, "Pais")
pais_posicion_cruzada Pais Defensa Delantero Mediocentro Portero Total General
1 Argentina 11 9 13 5 38
2 Australia 6 3 5 2 16
3 Belgium 7 13 12 3 35
4 Brazil 12 9 13 3 37
5 Cameroon 11 9 9 2 31
6 Canada 11 6 13 3 33
7 Costa Rica 7 4 4 1 16
8 Croatia 11 6 13 3 33
9 Denmark 10 12 13 1 36
10 Ecuador 16 9 20 4 49
11 England 10 9 11 4 34
12 France 11 7 12 1 31
13 Germany 10 8 12 3 33
14 Ghana 9 8 15 3 35
15 IR Iran 14 7 17 2 40
16 Japan 17 7 19 2 45
17 Korea Republic 13 10 14 2 39
18 Mexico 12 8 10 1 31
19 Morocco 11 7 9 1 28
20 Netherlands 12 11 7 4 34
21 Poland 14 5 16 4 39
22 Portugal 11 8 11 3 33
23 Senegal 10 5 11 2 28
24 Serbia 7 4 13 2 26
25 Spain 14 11 8 2 35
26 Switzerland 8 6 14 1 29
27 Tunisia 9 7 11 2 29
28 United States 13 12 11 2 38
29 Uruguay 11 7 18 3 39
30 Wales 9 7 6 2 24
31 Total General 327 234 360 73 994
Por último, se guardan en un archivo de Word.
doc_tablas <- read_docx() #Se crea el documento Word
doc_tablas <- doc_tablas %>%
body_add_par("Tabla Cruzada de posición y región", style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = region_posicion_cruzada,
align_table = "center",
style = "table_template")%>%
body_add_break(pos = "after") %>% #Se agrega salto de página
body_add_par("Tabla Cruzada de país y posición", style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = pais_posicion_cruzada,
align_table = "center",
style = "table_template")%>% #Se agrega la tabla
body_add_break(pos = "after")
# Se guarda en un documento de Word
print(doc_tablas, target = "../docs/cruzadas.docx")Se revisan las estadísticas descriptivas de las variables
cuantitativas.Se utiliza la función summary().
summary(datos_limpios[var_cuant]) Edad Partidos_Jugados Partidos_11_inicial Minutos_jugados
Min. :17.00 Min. : 1.000 Min. : 0.000 Min. : 1.0
1st Qu.:24.00 1st Qu.: 2.000 1st Qu.: 1.000 1st Qu.: 90.0
Median :26.00 Median : 4.000 Median : 2.000 Median : 235.5
Mean :26.61 Mean : 5.056 Mean : 3.649 Mean : 328.8
3rd Qu.:29.00 3rd Qu.: 7.000 3rd Qu.: 6.000 3rd Qu.: 505.0
Max. :38.00 Max. :19.000 Max. :17.000 Max. :1522.0
Goles Asistencias Amarillas Rojas
Min. : 0.0000 Min. :0.000 Min. :0.000 Min. :0.00000
1st Qu.: 0.0000 1st Qu.:0.000 1st Qu.:0.000 1st Qu.:0.00000
Median : 0.0000 Median :0.000 Median :0.000 Median :0.00000
Mean : 0.7183 Mean :0.497 Mean :0.504 Mean :0.01408
3rd Qu.: 1.0000 3rd Qu.:1.000 3rd Qu.:1.000 3rd Qu.:0.00000
Max. :13.0000 Max. :8.000 Max. :6.000 Max. :1.00000
Minutos_jugados_90 Goles_por_minuto Asistencias_por_minuto
Min. : 0.000 Min. :0.0000 Min. :0.0000
1st Qu.: 1.000 1st Qu.:0.0000 1st Qu.:0.0000
Median : 2.600 Median :0.0000 Median :0.0000
Mean : 3.654 Mean :0.2041 Mean :0.1627
3rd Qu.: 5.600 3rd Qu.:0.1975 3rd Qu.:0.1400
Max. :16.900 Max. :6.4300 Max. :9.0000
Se crea una tabla por cada variable y se guarda en un documento de Word.
doc_tablas <- read_docx() #Se crea el documento Word
list_descr <- lst() #Se crea una lista vacía en donde se van a ir guardando cada tabla
for (columna in var_cuant) {
tabla_descriptiva <-summary(datos_limpios[columna]) #Se crea la tabla por cada columna
tabla_descriptiva <- as.data.frame((tabla_descriptiva[,1])) #Se convierte a una data frame
colnames(tabla_descriptiva) <- c(columna) #Se cambia el nombre de las columnas
assign(paste("tabla_", columna, sep = ""), as.data.frame(tabla_descriptiva)) #Se asigna a un objeto
list_descr <- append(list_descr, tabla_descriptiva) #Se adjunta a la lista
#Se guarda en un Word
doc_tablas <- doc_tablas%>%
body_add_par(columna, style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = tabla_descriptiva,
align_table = "center",
style = "table_template") %>% #Se agrega la tabla
body_add_break(pos = "after") #Se agrega salto de página
}Se guarda el documento en la caperta docs.
print(doc_tablas, target = "../docs/descriptivas.docx")Se observan algunos ejemplos de las tablas.
as.data.frame(list_descr$Goles_por_minuto) list_descr$Goles_por_minuto
1 Min. :0.0000
2 1st Qu.:0.0000
3 Median :0.0000
4 Mean :0.2041
5 3rd Qu.:0.1975
6 Max. :6.4300
as.data.frame(list_descr$Goles) list_descr$Goles
1 Min. : 0.0000
2 1st Qu.: 0.0000
3 Median : 0.0000
4 Mean : 0.7183
5 3rd Qu.: 1.0000
6 Max. :13.0000
Se pueden generar tablas descriptivas de las variables agregadas por
la Posicion, por ello se utiliza el operador
pipe %>%.
promedio_gol <- datos_limpios %>% #Se toma la base de datos
group_by(Posicion) %>% # Se agrupan por la variable posición
summarize(Promedio = mean(Goles), Mediana = median(Goles), Des_Estand = sd(Goles)) #Se crean estadísticos descriptivos por la variable goles
promedio_gol# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.223 0 0.572
2 Delantero 1.67 1 2.45
3 Mediocentro 0.694 0 1.24
4 Portero 0 0 0
Se crea un ciclo for para crear todas las tablas y
guardarlas en un archivo de Word.
doc_tablas <- read_docx() #Se crea el documento Word
for (var in var_cuant){
tabla_posicion <- datos_limpios %>%
group_by(Posicion) %>%
summarize(Promedio = mean(!!sym(var)), Mediana = median(!!sym(var)), Des_Estand = sd(!!sym(var)))
#!!sym(var) convierte la cadena de caracteres en un símbolo en dplyr
assign(paste("tabla_posicion_", var, sep = ""), tabla_posicion) #Se crea un objeto por cada tabla
#Se guarda en un Word
doc_tablas <- doc_tablas %>%
body_add_par(var, style ="heading 1") %>% #Se agrega el título
body_add_par("") %>% # Se agrega un enter
body_add_table(value = tabla_posicion,
align_table = "center",
style = "table_template") %>% #Se agrega la tabla
body_add_break(pos = "after") #Se agrega salto de página
}
# Se guarda el documento de Word
print(doc_tablas, target = "../docs/agregadas_posicion.docx")Se observan los resultados
for (var in var_cuant){
print(paste0("tabla_posicion_", var))
}[1] "tabla_posicion_Edad"
[1] "tabla_posicion_Partidos_Jugados"
[1] "tabla_posicion_Partidos_11_inicial"
[1] "tabla_posicion_Minutos_jugados"
[1] "tabla_posicion_Goles"
[1] "tabla_posicion_Asistencias"
[1] "tabla_posicion_Amarillas"
[1] "tabla_posicion_Rojas"
[1] "tabla_posicion_Minutos_jugados_90"
[1] "tabla_posicion_Goles_por_minuto"
[1] "tabla_posicion_Asistencias_por_minuto"
for (var in var_cuant){
tabla_posicion <- get(paste0("tabla_posicion_", var)) #Convierte la cada de texto en un objeto
print(tabla_posicion) #Imprime tabla
print("_______________________________________") #Imprime línea de separación
}# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 26.9 27 3.80
2 Delantero 26.1 26 3.92
3 Mediocentro 26.1 26 3.94
4 Portero 29.5 29 3.87
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 4.82 4 3.75
2 Delantero 4.98 4 3.63
3 Mediocentro 5.39 5 3.86
4 Portero 4.70 4 3.72
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 3.97 3 3.63
2 Delantero 2.94 1 3.54
3 Mediocentro 3.63 2 3.64
4 Portero 4.58 4 3.83
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 360. 302 317.
2 Delantero 271. 141 291.
3 Mediocentro 321. 225 299.
4 Portero 412. 360 337.
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.223 0 0.572
2 Delantero 1.67 1 2.45
3 Mediocentro 0.694 0 1.24
4 Portero 0 0 0
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.339 0 0.668
2 Delantero 0.679 0 1.29
3 Mediocentro 0.619 0 1.12
4 Portero 0.0137 0 0.117
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.578 0 0.889
2 Delantero 0.376 0 0.761
3 Mediocentro 0.583 0 0.937
4 Portero 0.192 0 0.518
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.0245 0 0.155
2 Delantero 0.00855 0 0.0923
3 Mediocentro 0.00833 0 0.0910
4 Portero 0.0137 0 0.117
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 4.00 3.4 3.53
2 Delantero 3.01 1.6 3.23
3 Mediocentro 3.57 2.5 3.32
4 Portero 4.57 4 3.74
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.0541 0 0.194
2 Delantero 0.507 0.275 0.804
3 Mediocentro 0.185 0 0.467
4 Portero 0 0 0
[1] "_______________________________________"
# A tibble: 4 × 4
Posicion Promedio Mediana Des_Estand
<chr> <dbl> <dbl> <dbl>
1 Defensa 0.129 0 0.579
2 Delantero 0.251 0 0.658
3 Mediocentro 0.168 0 0.328
4 Portero 0.00685 0 0.0585
[1] "_______________________________________"
Se empieza calculando la amplitud de la variable. Se
utiliza el mínimo y el máximo yluego se resta.
amplitud <- (max(datos_limpios$Edad) - min(datos_limpios$Edad))La amplitud es de 21, lo cual indica que los datos
varían entre 21 valores.
amplitud[1] 21
Se busca la cantidad de categorías que puedan dar un múltiplo de
5 o de 10
amplitud/4[1] 5.25
Como resultado, se crearán 5 categorías, con
4 valores para cada categoría, exceptuando a la primera y
segunda, las cuales tendrán 5 casos. Se ilustra a
continuación:
Se utiliza la función cut() para crear la variable de
categorías. Primero, se crean los límites reales y luego
los límites dados que corresponden a cada una de las
categorías.
limites_reales <- c(16.5, 21.5, 25.5, 29.5, 33.5, 38.5) #Se incluye el límite inferior y el superior de todo el vector
limites_dados <- c("17-21", "22-25", "26-29", "30-33", "34-38")Se aplica a la variable Edad. Se crea una nueva variable
llamada Edad_agrupada.
datos_limpios$Edad_categorias <- cut(datos_limpios$Edad,
breaks = limites_reales,
labels = limites_dados,
include.lowest = TRUE)Se presenta un cuadro de las frecuencias por las categorías.
head(datos_limpios[c("Edad", "Edad_categorias")], 5)# A tibble: 5 × 2
Edad Edad_categorias
<int> <fct>
1 24 22-25
2 26 26-29
3 20 17-21
4 34 34-38
5 25 22-25
Se crea una tabla con las frecuencias absolutas por
categorías.
frec_abs <- table(datos_limpios$Edad_categorias)
frec_abs
17-21 22-25 26-29 30-33 34-38
91 330 341 180 52
Se obtiene la frecuencia relativa, para ello se utiliza la función
prop.table().
frec_relativas <- prop.table(frec_abs)
frec_relativas
17-21 22-25 26-29 30-33 34-38
0.09154930 0.33199195 0.34305835 0.18108652 0.05231388
Luego se crea una tabla con las frecuencias acumuladas
mas de y menos de.
menos_de <- cumsum(frec_abs)
menos_de17-21 22-25 26-29 30-33 34-38
91 421 762 942 994
mas_de <- cumsum(rev(frec_abs)) #Se revierte el orden de vector
mas_de <- sort(mas_de, decreasing = TRUE) #Se ordenan de más a menos
mas_de17-21 22-25 26-29 30-33 34-38
994 903 573 232 52
Se crea un data frame con cada una de los datos
anteriores.
edad_agrupada <- data.frame(
Categoria = limites_dados,
Frecuencia_absoluta = as.numeric(frec_abs),
Frecuencia_relativa = round(as.numeric(frec_relativas), 3),
Menos_de = menos_de,
Mas_de = mas_de )Se añade el total general a la tabla y se elimina el
nombre a las filas.
total_general <- data.frame(Categoria = "Total General", Frecuencia_absoluta = 994,
Frecuencia_relativa = 1, Menos_de = NA, Mas_de = NA)
edad_agrupada <- rbind(edad_agrupada, total_general)
rownames(edad_agrupada) <- NULLSe obtiene el siguiente resultado.
edad_agrupada Categoria Frecuencia_absoluta Frecuencia_relativa Menos_de Mas_de
1 17-21 91 0.092 91 994
2 22-25 330 0.332 421 903
3 26-29 341 0.343 762 573
4 30-33 180 0.181 942 232
5 34-38 52 0.052 994 52
6 Total General 994 1.000 NA NA
Se utilizan gráficos de barras para mostrar la
distribución de las variables cualitativas.Se agrupan por
Pais y se suma su frecuencia (n = ()).
pais_jugadores <- datos_limpios %>%
group_by(Pais)%>% #Se agrupan los datos por pais
summarize(Frecuencia = n()) %>% #Se cuentan los casos (n)
arrange(Frecuencia) #Se ordenan de menor a mayorpais_jugadores# A tibble: 30 × 2
Pais Frecuencia
<chr> <int>
1 Australia 16
2 Costa Rica 16
3 Wales 24
4 Serbia 26
5 Morocco 28
6 Senegal 28
7 Switzerland 29
8 Tunisia 29
9 Cameroon 31
10 France 31
# ℹ 20 more rows
g <- ggplot(pais_jugadores, aes(x = Frecuencia, y = reorder(Pais, desc(Frecuencia))))+
geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) + #Identity hace conteos, se le quita la leyenda, se rellena con color azul y se le da un ancho de 0.8
geom_text(aes(label = Frecuencia), vjust = 0.5, hjust = -0.4, size = 3) + # Se agrega el valor de la columna el final de la barra y se ajusta (hjust, vjust), el tamaño de las barras es de 3
labs(title = "Cantidad de jugadores por país", x = "Pais", y = "Cantidad de Jugadores")+ #Títulos y nombres de los ejes x,y
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) + #Se configura el caption
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gSe guarda el archivo en la caperta graficos.
ggsave("../graficos/pais_barplot.png", width = 8, height = 6, dpi = 300)Se grafica la variable Región.
region_jugadores <- datos_limpios %>%
group_by(Region)%>%
summarize(Frecuencia = n()) %>%
arrange(Frecuencia)region_jugadores# A tibble: 5 × 2
Region Frecuencia
<chr> <int>
1 CONCACAF 118
2 AFC 140
3 CAF 151
4 CONMEBOL 163
5 UEFA 422
ggplot(region_jugadores, aes(x = Frecuencia, y = reorder(Region, desc(Frecuencia))))+
geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) +
geom_text(aes(label = Frecuencia), vjust = 0.5, hjust = -0.4, size = 3) +
labs(title = "Cantidad de jugadores por Región", x = "Region", y = "Cantidad de Jugadores")+
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/region_barplot.png", width = 8, height = 6, dpi = 300)posicion_jugadores <- datos_limpios %>%
group_by(Posicion)%>%
summarize(Frecuencia = n()) %>%
arrange(Frecuencia)posicion_jugadores# A tibble: 4 × 2
Posicion Frecuencia
<chr> <int>
1 Portero 73
2 Delantero 234
3 Defensa 327
4 Mediocentro 360
ggplot(posicion_jugadores, aes(y = Frecuencia, x = reorder(Posicion, desc(Frecuencia))))+
geom_bar(stat = "identity", width = 0.8, show.legend = FALSE, fill = "steelblue" ) +
geom_text(aes(label = Frecuencia), vjust = -0.5, hjust = 0.5, size = 3) +
labs(title = "Cantidad de jugadores por Posición", x = "Posición", y = "Cantidad de Jugadores")+
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/posicion_barplot.png", width = 8, height = 6, dpi = 300)Se utilizan histogramas para representar la
distribuciones de los valores enteros.
g <- ggplot(datos_limpios, aes(x = Edad)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) + #Histograma con lineas blancas, ancho de 1 persona por barra y relleno azul
labs(title = "Histograma de Edad", x = "Valores", y = "Frecuencia") + #Titulo y etiquetas de los ejes x, y
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Edad), max(datos_limpios$Edad), 1)) + #Solicita ir de 1 en 1 en la numeración del eje x.
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Edad, group = Posicion,fill = Posicion)) + #Se agrupa y colorea por posición
geom_histogram(binwidth=1, color = "white") +
facet_wrap(~ Posicion) + #Se crea una parrilla y coloca cada histograma en una columna, en este caso la posición.
labs(title = "Histograma de Edad", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Edad), max(datos_limpios$Edad), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se utiliza la tabla edad_agrupada para crear polígonos
de frecuencia absoluta y acumulada.
Frecuencia absoluta
plot_ly(edad_agrupada[1:5, ], x = ~Categoria, y = ~Frecuencia_absoluta, type = "scatter", mode = "markers") %>%
add_trace(mode = "lines") %>%
layout(showlegend = FALSE,
title = "<b>Polígono de Frecuencias</b> \n Edad",
yaxis = list(title = "Frecuencia Absoluta"),
annotations = list(
list(
text = "Fuente: Estadística Introductoria",
showarrow = FALSE,
xref = "paper",
yref = "paper",
x = 1,
y = -0.1
)
))Frecuencia Relativa
plot_ly(edad_agrupada[1:5, ], x = ~Categoria, y = ~Frecuencia_relativa, type = "scatter", mode = "markers") %>%
add_trace(mode = "lines") %>%
layout(showlegend = FALSE,
title = "<b>Polígono de Frecuencias</b> \n Edad",
yaxis = list(title = "Frecuencia Relativa"),
annotations = list(
list(
text = "Fuente: Estadística Introductoria",
showarrow = FALSE,
xref = "paper",
yref = "paper",
x = 1,
y = -0.1
)
))Menos de
plot_ly(edad_agrupada[1:5, ], x = ~Categoria, y = ~menos_de, type = "scatter", mode = "markers") %>%
add_trace(mode = "lines") %>%
layout(showlegend = FALSE,
title = "<b>Polígono de Frecuencias</b> \n Edad",
yaxis = list(title = "Frecuencia"),
annotations = list(
list(
text = "Fuente: Estadística Introductoria",
showarrow = FALSE,
xref = "paper",
yref = "paper",
x = 1,
y = -0.1
)
))Más de
plot_ly(edad_agrupada[1:5, ], x = ~Categoria, y = ~mas_de, type = "scatter", mode = "markers") %>%
add_trace(mode = "lines") %>%
layout(showlegend = FALSE,
title = "<b>Polígono de Frecuencias</b> \n Edad",
yaxis = list(title = "Frecuencia"),
annotations = list(
list(
text = "Fuente: Estadística Introductoria",
showarrow = FALSE,
xref = "paper",
yref = "paper",
x = 1,
y = -0.1
)
))Se guarda el archivo en la caperta graficos.
ggsave("../graficos/edad_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Partidos_Jugados)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de Partidos Jugados", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_Jugados), max(datos_limpios$Partidos_Jugados), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Partidos_Jugados, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de Partidos Jugados", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_Jugados), max(datos_limpios$Partidos_Jugados), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/partidos_jugados_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Partidos_11_inicial)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de Partidos Jugados desde el inicio", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_11_inicial), max(datos_limpios$Partidos_11_inicial), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Partidos_11_inicial, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de Partidos Jugados desde el inicio", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Partidos_11_inicial), max(datos_limpios$Partidos_11_inicial), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/partidos_11_inicial_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Minutos_jugados)) +
geom_histogram(fill = "steelblue", binwidth=20, color = "white") +
labs(title = "Histograma de minutos jugados", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Minutos_jugados, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=20) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de minutos jugados", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/minutos_jugados_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Goles)) +
geom_histogram(fill = "steelblue", binwidth=1, color = "white") +
labs(title = "Histograma de Goles", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Goles), max(datos_limpios$Goles), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Goles, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de Goles", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Goles), max(datos_limpios$Goles), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/goles_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Asistencias)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de Asistencias", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias), max(datos_limpios$Asistencias), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Asistencias, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de Asistencias", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias), max(datos_limpios$Asistencias), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/asistencias_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Amarillas)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de tarjetas amarillas", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Amarillas), max(datos_limpios$Amarillas), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Amarillas, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de tarjetas amarillas", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Amarillas), max(datos_limpios$Amarillas), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/amarillas_histplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Rojas)) +
geom_histogram(fill = "steelblue", color = "white", binwidth=1) +
labs(title = "Histograma de tarjetas rojas", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Rojas), max(datos_limpios$Rojas), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Rojas, fill = Posicion, group= Posicion)) +
geom_histogram(color = "white", binwidth=1) +
facet_wrap(~ Posicion) +
labs(title = "Histograma de tarjetas rojas", x = "Valores", y = "Frecuencia") +
theme(plot.caption = element_text(hjust = 0, size = 8, face = "italic")) +
scale_x_continuous(breaks = seq(min(datos_limpios$Rojas), max(datos_limpios$Rojas), 1)) +
labs(caption = "Trabajo Final, Estadística Introductoria. UCR")Se guarda el archivo en la caperta graficos.
ggsave("../graficos/rojas_histplot.png", width = 8, height = 6, dpi = 300)Se utilizan gráficos de densidad, para las variables
continuas ya que tienen valores con decimales.
g <- ggplot(datos_limpios, aes(x = Minutos_jugados_90)) + #Se utiliza solo una variable
geom_density(fill = "steelblue", alpha = 0.5) + #Alfa es la opacidad del color debajo de la curva
labs(title = "Minutos Jugados en 90 minutos", x = "Minutos Jugados", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Minutos_jugados_90, group = Posicion, fill = Posicion)) +
geom_density(alpha = 0.4) + #Indica el tipo de gráfico y la opacidad
facet_wrap(~ Posicion) + #Se hace una regilla con las categorías de las posiciones
scale_x_continuous(breaks = seq(min(datos_limpios$Minutos_jugados_90), max(datos_limpios$Minutos_jugados_90), 2)) + #Indica que los valores del eje x vayan de 1 a 1
labs(title = "Minutos jugados y posición del jugador", y = "Densidad", x = "Cantidad de Minutos", caption = "Trabajo Final, Estadística Introductoria. UCR") Se guarda el archivo en la caperta graficos.
ggsave("../graficos/minutos_jugados_90_densplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Goles_por_minuto)) +
geom_density(fill = "steelblue", alpha = 0.5) +
labs(title = "Goles por minuto", x = "Goles", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Goles_por_minuto, group = Posicion, fill = Posicion)) +
geom_density(alpha = 0.4) +
facet_wrap(~ Posicion) +
scale_x_continuous(breaks = seq(min(datos_limpios$Goles_por_minuto), max(datos_limpios$Goles_por_minuto), 1)) +
labs(title = "Goles por minuto y posición del jugador", y = "Densidad", x = "Cantidad de goles por minuto", caption = "Trabajo Final, Estadística Introductoria. UCR") Se guarda el archivo en la caperta graficos.
ggsave("../graficos/minutos_jugados_90_densplot.png", width = 8, height = 6, dpi = 300)g <- ggplot(datos_limpios, aes(x = Asistencias_por_minuto)) +
geom_density(fill = "steelblue", alpha = 0.5) +
labs(title = "Asistencias por minuto", x = "Asistencias", y = "Densidad", caption = "Trabajo Final, Estadística Introductoria. UCR")
gggplot(datos_limpios, aes(x = Asistencias, group = Posicion, fill = Posicion)) +
geom_density(alpha = 0.4) +
facet_wrap(~ Posicion) +
scale_x_continuous(breaks = seq(min(datos_limpios$Asistencias_por_minuto), max(datos_limpios$Asistencias_por_minuto), 1)) +
labs(title = "Asistencias por minuto y posición del jugador", y = "Densidad", x = "Cantidad de Asistencias", caption = "Trabajo Final, Estadística Introductoria. UCR") Se guarda el archivo en la caperta graficos.
ggsave("../graficos/asistencias_por_minuto_densplot.png", width = 8, height = 6, dpi = 300)stem(datos_limpios$Edad)
The decimal point is at the |
17 | 00
18 | 0000
19 | 000000000000000000000
20 | 000000000000000000000000000
21 | 0000000000000000000000000000000000000
22 | 0000000000000000000000000000000000000000000000000000000
23 | 00000000000000000000000000000000000000000000000000000000000000000000+2
24 | 00000000000000000000000000000000000000000000000000000000000000000000+22
25 | 00000000000000000000000000000000000000000000000000000000000000000000+11
26 | 00000000000000000000000000000000000000000000000000000000000000000000+15
27 | 00000000000000000000000000000000000000000000000000000000000000000000
28 | 00000000000000000000000000000000000000000000000000000000000000000000
29 | 00000000000000000000000000000000000000000000000000000000000000000000+10
30 | 000000000000000000000000000000000000000000000000000000000000000
31 | 000000000000000000000000000000000000000000000000000
32 | 00000000000000000000000000000000000000000
33 | 0000000000000000000000000
34 | 0000000000000000
35 | 000000000000000000000
36 | 00000000
37 | 00
38 | 00000
stem(datos_limpios$Minutos_jugados)
The decimal point is 2 digit(s) to the right of the |
0 | 00000000000000000001111111111111111111111111111111111222222222222222+212
1 | 00000000000000000111111111111111111111222222222222222222222223333333+88
2 | 00000000000011111111122222222333333344444444444444445555555555555666+23
3 | 00000000111111112222222222223333333333334444444455555555566666666666+21
4 | 00000001111112222223333333333334444444445555555555555555555666677788
5 | 00000111222222233333333344444444444444444444455566667777777788888999
6 | 0000001111111111122223333333344455555666778888889999
7 | 0001112222222222233333445556666666667788999
8 | 0011122222345556678999
9 | 00000111566779999
10 | 00244445555677888
11 | 111223346779
12 | 023566678
13 | 123338
14 | 0
15 | 122
dataset.Se cambia el nombre a las variables.
names(datos_limpios) <- c("País", "Región", "Jugador", "Posición", "Edad", "Partidos Jugados", "Partidos Inicial", "Minutos Jugados", "Minutos jugados por Partido", "Goles", "Asistencias", "Amarillas", "Rojas", "Goles por minuto","Asistencias por minuto")Warning: The `value` argument of `names<-` must have the same length as `x` as of tibble
3.0.0.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
generated.
Warning: The `value` argument of `names<-` can't be empty as of tibble 3.0.0.
This warning is displayed once every 8 hours.
Call `lifecycle::last_lifecycle_warnings()` to see where this warning was
generated.
glimpse(datos_limpios)Rows: 994
Columns: 16
$ País <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuado…
$ Región <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CON…
$ Jugador <chr> "Pí¨rvis Estupiñán", "CarÅ‚os Gruí¨Åºo…
$ Posición <chr> "Defensa", "Mediocentro", "Mediocentro",…
$ Edad <int> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, …
$ `Partidos Jugados` <int> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, …
$ `Partidos Inicial` <int> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8…
$ `Minutos Jugados` <int> 1513, 1395, 1305, 1079, 1043, 990, 990, …
$ `Minutos jugados por Partido` <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0…
$ Goles <int> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1…
$ Asistencias <int> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1…
$ Amarillas <int> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0…
$ Rojas <int> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0…
$ `Goles por minuto` <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18…
$ `Asistencias por minuto` <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00…
$ NA <fct> 22-25, 26-29, 17-21, 34-38, 22-25, 17-21…
Se exportan los datos en un formato csv.
write.csv(datos_limpios, file = "../data/datos_limpios.csv",
row.names = FALSE, fileEncoding = "UTF-8")df = read.csv("../data/datos_limpios.csv", encoding = "Latin-1")head(df) País Región Jugador Posición Edad Partidos.Jugados
1 Ecuador CONMEBOL Pí¨rvis Estupiñán Defensa 24 17
2 Ecuador CONMEBOL CarÅ‚os Gruí¨Åºo Mediocentro 26 16
3 Ecuador CONMEBOL Moisés Caicí¨do Mediocentro 20 15
4 Ecuador CONMEBOL Ã\u0081ngí¨Å‚ Mí¨na Mediocentro 34 15
5 Ecuador CONMEBOL Michaí¨Å‚ Estrada Delantero 25 17
6 Ecuador CONMEBOL Pií¨ro Hincapié Defensa 20 11
Partidos.Inicial Minutos.Jugados Minutos.jugados.por.Partido Goles
1 17 1513 16.8 2
2 16 1395 15.5 1
3 15 1305 14.5 2
4 13 1079 12.0 2
5 11 1043 11.6 6
6 11 990 11.0 1
Asistencias Amarillas Rojas Goles.por.minuto Asistencias.por.minuto NA.
1 1 2 0 0.12 0.06 22-25
2 0 2 0 0.06 0.00 26-29
3 4 5 0 0.14 0.28 17-21
4 3 2 0 0.17 0.25 34-38
5 2 2 0 0.52 0.17 22-25
6 0 1 0 0.09 0.00 17-21
Se debe de hacer de nuevo el proceso de limpieza de los nombres en la app.
glimpse(df)Rows: 994
Columns: 16
$ País <chr> "Ecuador", "Ecuador", "Ecuador", "Ecuador"…
$ Región <chr> "CONMEBOL", "CONMEBOL", "CONMEBOL", "CONME…
$ Jugador <chr> "Pí¨rvis Estupiñán", "CarÅ‚os Gruí¨Åºo",…
$ Posición <chr> "Defensa", "Mediocentro", "Mediocentro", "…
$ Edad <int> 24, 26, 20, 34, 25, 20, 25, 34, 32, 23, 30…
$ Partidos.Jugados <int> 17, 16, 15, 15, 17, 11, 11, 10, 12, 13, 10…
$ Partidos.Inicial <int> 17, 16, 15, 13, 11, 11, 11, 10, 10, 8, 8, …
$ Minutos.Jugados <int> 1513, 1395, 1305, 1079, 1043, 990, 990, 82…
$ Minutos.jugados.por.Partido <dbl> 16.8, 15.5, 14.5, 12.0, 11.6, 11.0, 11.0, …
$ Goles <int> 2, 1, 2, 2, 6, 1, 2, 0, 4, 0, 1, 3, 0, 1, …
$ Asistencias <int> 1, 0, 4, 3, 2, 0, 0, 0, 1, 0, 1, 1, 1, 1, …
$ Amarillas <int> 2, 2, 5, 2, 2, 1, 2, 2, 5, 1, 0, 4, 3, 0, …
$ Rojas <int> 0, 0, 0, 0, 0, 0, 0, 1, 0, 0, 0, 1, 0, 0, …
$ Goles.por.minuto <dbl> 0.12, 0.06, 0.14, 0.17, 0.52, 0.09, 0.18, …
$ Asistencias.por.minuto <dbl> 0.06, 0.00, 0.28, 0.25, 0.17, 0.00, 0.00, …
$ NA. <chr> "22-25", "26-29", "17-21", "34-38", "22-25…